package com.wesley.growth;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

import java.io.ByteArrayInputStream;

/**
 * AsposeCracker
 *
 * @author WangPanYong
 * @since 2023/06/21 15:42
 */
public class AsposeCracker {

    public static void main(String[] args) {
//        License license = new License();
//        ByteArrayInputStream inputStream = null;
//        license.setLicense(inputStream);
        modifyExcelJar();
    }

    /**
     * 修改cells.jar包里面的校验
     */
    public static void modifyExcelJar() {
        try {
            //这一步是完整的jar包路径,选择自己解压的jar目录
            ClassPool.getDefault().insertClassPath("E:\\DevelopTools\\aspose-cells-23.5.jar");
            //获取指定的class文件对象
            CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.cells.u94");
            //从class对象中解析获取所有方法
            CtMethod[] declaredMethods = zzZJJClass.getDeclaredMethods();
            for (CtMethod ctMethod : declaredMethods) {
                //获取方法获取参数类型
                CtClass[] ps = ctMethod.getParameterTypes();
                //筛选同名方法，入参是Document
                if (ps.length == 1 && ctMethod.getName().equals("a") && ps[0].getName().equals("org.w3c.dom.Document")) {
                    System.out.println("ps[0].getName==" + ps[0].getName());
                    //替换指定方法的方法体
                    ctMethod.setBody("{a = this;com.aspose.cells.g8z.a();}");
                }
            }
            //这一步就是将破译完的代码放在桌面上
            zzZJJClass.writeFile("D:\\Desktop\\Temp\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
